#include <stdio.h>
#include <string.h>
void print_arr1(char *p[],int length);
void print_arr2(char **p,int length);
void sort1(char *p[],int length);
void sort2(char **p,int length);
int main(void)
{
	char *p[] = {"bjin1","ajin2","cjin3"};
	// 这里是不能进行赋值的，指针指向的是一个常量区地址
	//*p[0] = 'a'; 
	//printf("p[0] = %p;*p[0] = %c;p[0] = %s\n",p[0],*p[0],p[0]);
	printf("before sort\n");
	print_arr1(p,3);
	printf("after sort\n");
	//sort1(p,3);
	sort2(p,3);
	print_arr2(p,3);
	return 0;
}
void print_arr1(char *p[],int length)
{
	for(int i = 0;i < length;i++)
	{
		printf("p[%d] = %s\n",p[i]);
	}
}
// 参数p为二级指针
void print_arr2(char **p,int length)
{
	for(int i = 0;i < length;i++)
	{
		// 下面两个的输出是一样的 *(p + i) = p[i]
		// %s 需要的是一个地址，所以这个不需要 **(p + i)，**(p + i) 是字符串数组的行的第一列的之
		printf("p[%d] = %s\n",*(p + i));
		//printf("p[%d] = %s\n",p[i]);
	}
}
void sort1(char *p[],int length)
{
	int minIndex = 0,i=0,j;
	char *temp;
	for(;i < length - 1;i++)
	{
		minIndex = i;
		for(j = i;j < length;j++)
		{
			if(strcmp(p[minIndex],p[j]) > 0)
			{
				minIndex = j;
			}
		}
		if(minIndex != i)
		{
			temp = p[minIndex];
			p[minIndex] = p[i];
			p[i] = temp;
		}
	}
}
void sort2(char **p,int length)
{
	int minIndex = 0,i=0,j;
	char *temp;
	for(;i < length - 1;i++)
	{
		minIndex = i;
		for(j = i;j < length;j++)
		{
			if(strcmp(p[minIndex],p[j]) > 0)
			{
				minIndex = j;
			}
		}
		if(minIndex != i)
		{
			temp = p[minIndex];
			p[minIndex] = p[i];
			p[i] = temp;
		}
	}
}
